import java.util.HashSet;

public class Solution {
    public boolean isHappy(int n) {
        // 用 HashSet 来记录每个出现过的数，检测是否进入循环
        HashSet<Integer> seen = new HashSet<>();

        // 循环直到数变为 1 或者进入循环
        while (n != 1) {
            if (seen.contains(n)) {
                // 如果 n 已经出现过，说明进入了循环
                return false;
            }
            // 把当前的数字加入到 HashSet 中
            seen.add(n);
            // 计算数字每一位的平方和
            n = sumOfSquares(n);
        }

        // 如果 n 最终变成 1，说明是快乐数
        return true;
    }

    // 计算每个数字的平方和
    private int sumOfSquares(int n) {
        int sum = 0;
        while (n > 0) {
            int digit = n % 10;  // 取当前数字的最后一位
            sum += digit * digit;  // 计算平方并累加
            n /= 10;  // 去掉最后一位数字
        }
        return sum;
    }

    public static void main(String[] args) {
        Solution solution = new Solution();
        System.out.println(solution.isHappy(19)); // 输出 true
        System.out.println(solution.isHappy(2));  // 输出 false
    }
}
